package com.smartao.base.acl;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Table;

import com.smartao.core.orm.entity.BaseEntity;

/**
 * 访问控制条目
 * 
 * 一个AccessEntry描述一条访问控制规则，如：某人/角色/部门/岗位/安全级别 对 某业务对象 可读/写/管理；
 * @author sunxing
 *
 */

@Entity
@Table(name = "T_BASE_ACCESS_ENTRY")
public class AccessEntry extends BaseEntity<AccessEntry> {
	private static final long serialVersionUID = -1010759515698778893L;
	// 业务对象ID
	private Long entityId;
	// 安全角色标志； 可以是用户，角色，岗位，部门，安全级别；
	private Long sid;
	// 权限位列掩码；每一个二进制位控制一个权限；该mask值则是该二进制串所对应的十进制值；
	private Integer mask;
	
	// 是授权还是拒绝
	// TODO 是否需要granting，有待商榷，该字段有可能带来不必要的麻烦和性能开销；
	private boolean granting = true;
	// 权限规则类型，反映了sid的类型；
	
	@Enumerated(EnumType.STRING)
	private EntryType entryType;
	
	public Long getEntityId() {
		return entityId;
	}

	public void setEntityId(Long entityId) {
		this.entityId = entityId;
	}

	public Long getSid() {
		return sid;
	}

	public void setSid(Long sid) {
		this.sid = sid;
	}

	public Integer getMask() {
		return mask;
	}

	public void setMask(Integer mask) {
		this.mask = mask;
	}

	public boolean isGranting() {
		return granting;
	}

	public void setGranting(boolean granting) {
		this.granting = granting;
	}

	public EntryType getEntryType() {
		return entryType;
	}

	public void setEntryType(EntryType entryType) {
		this.entryType = entryType;
	}

}
